package com.iakuil.app.common.tp;

import com.iakuil.app.common.core.constant.SysConstant;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

/**
 * 自定义线程池配置
 *
 * @author Kai
 */
@Getter
@Setter
@ConfigurationProperties(prefix = SysConstant.APP_SYMBOL + ".tp")
public class ThreadPoolProperties {

    private Boolean enabled = Boolean.FALSE;

    @NestedConfigurationProperty
    private Prop[] pools = {};

    @Getter
    @Setter
    public static class Prop {
        /**
         * 核心线程名称
         */
        private String name;

        /**
         * 是否为守护线程
         */
        private boolean isDaemon = Boolean.FALSE;

        /**
         * 核心线程大小
         */
        private Integer corePoolSize;

        /**
         * 最大线程大小
         */
        private Integer maxPoolSize;

        /**
         * 非核心线程存活时间，单位：秒
         */
        private Integer keepAliveSeconds;

        /**
         * 等待队列容量
         */
        private Integer queueCapacity;

        /**
         * 等待时间 （默认为0，此时立即停止），并没等待xx秒后强制停止
         */
        private Integer awaitTerminationMillis = 60;
    }
}
